﻿//-----------------------------------------------------------------------
// <copyright company="www.3WayWebdesign.de">
// Permission is hereby granted, free of charge, to any person obtaining
// a copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to
// permit persons to whom the Software is furnished to do so, subject to
// the following conditions:
//
// The above copyright notice and this permission notice shall be
// included in all copies or substantial portions of the Software.
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
// EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
// NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
// LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
// OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
// WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
// </copyright>
//
// <author>Michael Morbach</author>
// <email>Michael@3waywebdesign.de</email>
// <web>http://www.3waywebdesign.de</web>
//-----------------------------------------------------------------------

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Security.Cryptography;
using System.Text;
using System.Web;

namespace Tww.Pixxler.PixxlerService.Domain
{
    public class Encryption64
    {
        private static byte[] key = { };
        private static byte[] IV = { 18, 25, 37, 44, 59, 62, 74, 81 };

        public static string Decrypt( string stringToDecrypt, string sEncryptionKey )
        {
            byte[] inputByteArray = new byte[ stringToDecrypt.Length ];
            key = Encoding.UTF8.GetBytes( sEncryptionKey.Substring( 0, 8 ) );
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            inputByteArray = Convert.FromBase64String( stringToDecrypt );
            using ( MemoryStream ms = new MemoryStream() )
            {
                CryptoStream cs = new CryptoStream( ms, des.CreateDecryptor( key, IV ), CryptoStreamMode.Write );
                cs.Write( inputByteArray, 0, inputByteArray.Length );
                cs.FlushFinalBlock();
                Encoding encoding = Encoding.UTF8;
                return encoding.GetString( ms.ToArray() );
            }
        }

        public static string Encrypt( string stringToEncrypt, string sEncryptionKey )
        {
            key = Encoding.UTF8.GetBytes( sEncryptionKey.Substring( 0, 8 ) );
            DESCryptoServiceProvider des = new DESCryptoServiceProvider();
            Byte[] inputByteArray = Encoding.UTF8.GetBytes( stringToEncrypt );
            using ( MemoryStream ms = new MemoryStream() )
            {
                CryptoStream cs = new CryptoStream( ms, des.CreateEncryptor( key, IV ), CryptoStreamMode.Write );
                cs.Write( inputByteArray, 0, inputByteArray.Length );
                cs.FlushFinalBlock();
                return Convert.ToBase64String( ms.ToArray() );
            }
        }
    }
}